package qualomelhor.database;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import javax.persistence.Id;

import com.google.appengine.api.datastore.Blob;
import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Indexed;
import com.googlecode.objectify.annotation.Serialized;

import java.io.Serializable;

@Entity
public class Produto implements Serializable {

		private static final long serialVersionUID = 0;

		/*
		public static Produto getProdutoById(Long id) {
			Produto p = null;
			for (int i = 0; i < ParametrosSistema.listProduto.size(); i++) {
				if (ParametrosSistema.listProduto.get(i).getId().equals(id)) {
					p = ParametrosSistema.listProduto.get(i);
					break;
				}
			}
			return p;
		}
		*/

	    @Id
	    private Long id; 

	    @Indexed
	    private String nomeProduto;

	    private String descricao;

	    @Indexed
	    private Long idCategoria;

	    private String enderecoFotoMini;

	    private ArrayList<String> listEnderecoFoto;

	    @Serialized
	    private HashMap<PropriedadeProduto, Object> mapPropriedades;

	    @Serialized
	    private HashMap<PropriedadeProduto, NotaPropriedade> mapNotaPropriedade;

	    private boolean bloqueado;

	    //private String path;

	    private ArrayList<String> listBusca;

	    private int numComparacoes;

	    private Date dataInclusao;

	    private String schema;

	    public Produto() {

	    }

	    public Produto(String nomeProduto, String descricao, Long idCategoria, ArrayList<String> listEnderecoFoto, ArrayList<Blob> listImagesBlob, String enderecoFotoMini, Date dataInclusao) {
	    	this.nomeProduto = nomeProduto;
	    	this.descricao = descricao;
	    	this.mapPropriedades = new HashMap<PropriedadeProduto, Object>(0);
	    	this.idCategoria = idCategoria;
	        this.enderecoFotoMini = enderecoFotoMini;
	        this.listEnderecoFoto = listEnderecoFoto;
	        this.bloqueado = false;
	        this.listBusca = new ArrayList<String>(0);
	        this.listBusca.add(nomeProduto);
	        this.numComparacoes = 0;
	        this.dataInclusao = dataInclusao;
	        //this.path = ParametrosSistema.getFullLinkCategoria(Categoria.getCategoriaById(idCategoria)) + "/" + Util.converteEmLink(nomeProduto);
	        //this.path = "";
	        this.schema = "Thing";
	    } 

	    public Long getId() { 
	        return id; 
	    }

	    public String getNomeProduto() { 
	        return nomeProduto;
	    }

	    public String getDescricao() { 
	        return descricao;
	    }

	    public HashMap<PropriedadeProduto, Object> getMapPropriedades() {
	    	return mapPropriedades;
	    }

	    public HashMap<PropriedadeProduto, NotaPropriedade> getMapNotaPropriedade() {
	    	return mapNotaPropriedade;
	    }

	    public Long getIdCategoria() { 
	        return idCategoria;
	    }

	    public String getEnderecoFotoMini() {
	    	return enderecoFotoMini;
	    }

	    public ArrayList<String> getListEnderecoFoto() {
	    	return listEnderecoFoto;
	    }

	    public boolean getBloqueado() {
	    	return bloqueado;
	    }

	    /*
	    public String getPath() {
	    	return path;
	    }
	    */

	    public ArrayList<String> getListBusca() {
	    	return listBusca;
	    }

	    public int getNumComparacoes() {
	    	return numComparacoes;
	    }

	    public String getSchema() {
	    	return schema;
	    }

	    public Date getDataInclusao() { 
	        return dataInclusao; 
	    }

	    public void setId(Long id) {
	    	this.id = id;
	    }

	    public void setNomeProduto(String nomeProduto) {
	    	if (listBusca.contains(this.nomeProduto)) {
	    		listBusca.remove(this.nomeProduto);
	    	}
	    	
	    	this.nomeProduto = nomeProduto;
	    	listBusca.add(nomeProduto);
	    }

	    public void setDescricao(String descricao) {
	    	this.descricao = descricao;
	    }

	    public void setHashMapPropriedades(HashMap<PropriedadeProduto, Object> mapPropriedades) {
	    	this.mapPropriedades = mapPropriedades;
	    }

	    public void setHashMapNotaPropriedade(HashMap<PropriedadeProduto, NotaPropriedade> mapNotaPropriedade) {
	    	this.mapNotaPropriedade = mapNotaPropriedade;
	    }

	    public void setIdCategoria(Long idCategoria) {
	    	this.idCategoria = idCategoria;
	    }

	    public void setEnderecoFotoMini(String enderecoFotoMini) {
	    	this.enderecoFotoMini = enderecoFotoMini;
	    }

	    public void setListEnderecoFoto(ArrayList<String> listEnderecoFoto) {
	    	this.listEnderecoFoto = listEnderecoFoto;
	    }

	    public void setBloqueado(boolean bloqueado) {
	    	this.bloqueado = bloqueado;
	    }

	    /*
	    public void setPath(String path) {
	    	this.path = path;
	    }
	    */

	    public void setListBusca(ArrayList<String> listBusca) {
	    	this.listBusca = listBusca;
	    }

	    public void setNumComparacoes(int numComparacoes) {
	    	this.numComparacoes = numComparacoes;
	    }

	    public void setSchema(String schema) {
	    	this.schema = schema;
	    }

	    public void setDataInclusao(Date dataInclusao) { 
	        this.dataInclusao = dataInclusao; 
	    }
}